Cash 思索了好一陣子,專案團隊都是精英,除了佳麗姐不是技術職的,但 Pete 會幫忙照顧,其他人不要把他們當作上電腦補習班的初學者,大約給個方向起個頭,他們就可以往下進行,遇到問題或困難,他在進一步講解。
那 Ubuntu 的指令不再往下細講,對他們最有用的就是讓他們可以安裝好 Python,然後在上面開始練習機器學習相關的程式。
原先他估計就直接請大家直接使用 Ubuntu 18.04預設安裝的 Python 3.6。慎重起見,還是研究了Tensorflow, PyTorch, MxNet 等等機器學習相關框架,發現許多被發表的一些深度學習模型教學程式或是範例支援的 Python 版本有 2.7 等版本,測試了一下許多都要相當的改寫才能於Python 3.6 跑。於是他也研究了 Python 常用的環境管理 virtualEnv, pyEnv, 以及 AnaConda ,看來這幾個框架安裝環境共通性最高的是 AnaConda,所以他決定先讓大家試著安裝一下 AnaConda。
不過毫無意外的大家還是針對為何採用 AnaConda 做了一番討論,Cash 依然用稍帶無賴的回應來取得共識:”我選另外一個,一定還有人問我為何不用 XXX。基本上都很好,趕快熟悉一個,未來要真是有需要用其他的,上手很快的。”
還有大家質疑怎麼Python2 陰魂不散,這麼多年了,為何 Python3 並沒有完全取代舊版。這個除了接受歷史的演變,似乎也無解。也許這個專案有能力的話,就幫忙將那些以 Python2 開發的模型程式改寫成 Python3 吧?
AnaConda 是完整版,預設就安裝了所有人可能用到的套件九成,所以變得很龐大;但它也有精簡版 miniConda,預設較少套件,需要的時候再以 pip install packageXYZ 來安裝即可。
昨天已經下載了 miniConda,他請大家再以 ssh 連上 Server:
cd ~/downloads #昨天已經利用 mkdir 建立目錄 downloads
sh Miniconda3-latest-Linux-x86_64.sh #用sh 來執行昨天下載的腳本
一連串的回答yes與 Enter,最後詢問要不要在.bashrc 將 conda 加入PATH,一樣yes,安裝成功,這樣就有了 Python 的基本執行環境。
必須先 exit 跳出後,在重新ssh 進 Server
conda update conda #更新 conda 內含的程式包
conda list #查看 conda 已經包含哪些程式包
conda env list #查看有哪些環境可用
進入最關鍵的使用環境,許多深度學習需要 python 3.6 的版本,我們就建立一個環境給他:
conda create --name py36 python=3.6 #在conda建立一個取名為 py36 的環境,
source activate py36 #啟動 py36這個環境
python -V #檢查 Python 是否為 3.6
pip install -U pip #pip用來安裝Python 的程式包,此指令更新 pip 到最新板
pip install tensorflow #用pip 安裝tensorflow,相依的程式包也會幫忙一起安裝
又請大家 執行 python,進入 Python3.6 的提示 『>>>』請大家跑第一個Tensoflow 深度學習範例程式。
只要 Copy & Paste 下列程式碼到『>>>』即可執行
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
結果應該會出現類似
60000/60000 [==============================] - 6s 98us/step - loss: 0.2006 - acc: 0.9399
Epoch 2/5
60000/60000 [==============================] - 4s 67us/step - loss: 0.0813 - acc: 0.9752
Epoch 3/5
60000/60000 [==============================] - 4s 63us/step - loss: 0.0529 - acc: 0.9835
Epoch 4/5
60000/60000 [==============================] - 4s 69us/step - loss: 0.0368 - acc: 0.9883
Epoch 5/5
60000/60000 [==============================] - 5s 75us/step - loss: 0.0283 - acc: 0.9910
<tensorflow.python.keras.callbacks.History object at 0x7fe11c972f28>
再執行推理
model.evaluate(x_test, y_test)
結果為:
10000/10000 [==============================] - 0s 37us/step
[0.0703427215928532, 0.9794]
exit()
source deactivate #跳出剛剛進入的py36環境
他也請大家建立 Python 2.7 的環境,為未來準備
conda create --name py27 python=2.7
最後 Cash 請大家編寫自己的 Aliases,後續就不用打長長的指令,通常會把Alias放在『~/.bash_aliases』,『~』代表帳號所在home目錄;『.bash_aliases』是 Ubuntu預設放個人 Aliases 的地方。
nano ~/.bash_aliases #nano 是 Linux 其中的一個編輯器,也可以考慮用vi, vim。
alias py36='source activate py36'
alias py27='source activate py27'
alias deactivate='source deactivate'
編輯完,同時按下 CTRL 與 X 兩鍵(後續以 CTRL+X 簡稱 )再按 Y 同意儲存即可。
對於編輯器採 nano 又引發一些意見,為何是不vi 或是 vim。這個Cash就沒意見,因為他也只是因為習慣用 nano 編輯文字檔,覺得好上手就用了,而且這些指令都是 Ubuntu 預設就安裝好了,所以沒必要統一,依個人偏好。只不過才剛講完,佳麗馬上試用一下指令長度最短的 vi。
在Pete辛苦一番的指導中,佳麗驚奇感嘆:
”這一定是火星人科技,地球人誰能記得這麼奇葩的指令,按『i』才可以添加字元:結束要按 『ESC + : + q』”;
Pete 趕快請佳麗改用 nano,但是她依然繼續驚奇連連:
“要找個字串是按 『CTRL+W』;到最後一行是 『ALT+/』,我要飛回地球,這裡太危險了。”
對熟悉 Linux/Unix 相關系統的人而言,連上 Ubuntu Server 進行文字指令的操作並不會覺得難用,甚至有些狂熱份子宣稱那才是最有效率的作法。我們並不須如此厲害,但是要進入機器學習似乎九成以上的程式都是在 Linux 執行,無論是 Ubuntu 還是 CentOS 一開始都有點卡卡的,但是這是必經之路。
專案緣起記錄在 【UP, Scrum 與 AI專案】